package LC_0215;

import java.util.PriorityQueue;

/**
 * @author Jimmy Zhan WORKSTATION
 * @since 2023/7/12 11:38
 * 说明：小顶堆解法
 */

public class Heap {
    public int findKthLargest(int[] nums, int k) {
        if (nums == null) return 0;
        if (nums.length == 1) return nums[0];
        PriorityQueue<Integer> heap = new PriorityQueue<>((n1, n2) -> n1 - n2);
        for (int n: nums) {
            heap.add(n);
            if (heap.size() > k) {  // 维护一个容量为k的小顶堆（当前节点值比子节点的值都小的二叉树）
                heap.poll(); // 把最小的从栈顶弹出
            }
        }
        return heap.poll(); // 最后剩下来的这个栈顶就是k个最大值中最小的元素，也就是第k大的元素
    }
}
